<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="lodash.js"></script>
</head>
<body>
    <script>
        // 纯函数:相同的输入永远得到相同的输出.且没有任何可观察的副作用.  
        // 比如一个加法函数.输入参数1,1  输出结果永远是2
        // lodash是一个纯函数的功能库.提供了对数组,数字,对象,字符串,函数等操作的一些方法

        // 数组方法slice(a,b)  从数组中截取下标(a,b]的字符串,不会改变原数组   
        // 数组方法splice(a,b)  从数组中的下标a位置开始截取b个元素,返回一个新数组.会改变原数组

        let array = [1,2,3,4,5];
        
        //纯函数
        console.log(slice(0,3));//[1,2,3]
        console.log(slice(0,3));//[1,2,3]
        console.log(slice(0,3));//[1,2,3]  所以slice是纯函数,相同的输入永远得到相同的输出
        
        //不纯的函数
        console.log(splice(0,3));//[1,2,3]   执行后原数组变为[4,5,56]
        console.log(splice(0,3));//[4,5]  执行后原数组变为[]
        console.log(splice(0,3));//[]   //所以splice是不纯的函数

        // 纯函数的优点:
        // 1,纯函数的结果可以缓存起来 
        
        // [记忆函数lodash中的memoize()===>]


        // 纯函数没有任何可观察的副作用:当函数依赖外部状态时会产生副作用,所有的外部交互都可能带来副作用.副作用会带来安全隐患和不确定性,无法完全禁止,只能尽量控制



    </script>
</body>
</html>